package 启蒙阶段;

/**
 * 创建人：刘源江
 * 类描述：字符串
 * 创建时间：2022/4/3 23:35
 **/

public class demo11字符串 {
    public static void main(String[] args) {
        //String对象是不可变的，所有它们可以被共享，String类型是引用数据类型
        //字符串的底层就是字符数组
        String s1 = "abc";//"abc"是常量存储在常量池内存块，常量池没有这个常量会帮你创建，有了就使用同一个(共享)
        String s2 = "abc";//使用的是s1
        String s3 = new String("abc");//new出来的东西在堆内存，跟常量池不是同一个地方，地址值也不一样
        String s4 = new String("abc");//和new出来的s3不一样，地址值也不一样
        System.out.println(s1 == s2);//true，==号对于引用数据类型比较的是地址值，基本类型类比较的才是值
        System.out.println(s3 == s4);//false

        System.out.println("--------------------------");
        System.out.println("equals()方法和equalsIgnoreCase()方法的区别：");
        String a1 = "hello";
        String a2 = "hello";
        String a3 = "Hello";
        String a4 = new String("hello");
        //equals()方法：比较字符串的内容值是否相等，相等返回true，否则返回false
        System.out.println(a1.equals(a2));//true，因为a1和a2的内容值都是“hello”
        System.out.println(a1.equals(a3));//false，内容值不相等，因为这个方法严格区分大小写
        //equalsIgnoreCase()方法：比较字符串的内容值是否相等，只是忽略大小写
        System.out.println(a1.equalsIgnoreCase(a2));//true
        System.out.println(a1.equalsIgnoreCase(a3));//true
        System.out.println(a1.equalsIgnoreCase(a4));//true

        System.out.println("--------------------------");
        System.out.println("String的常用方法：");
        String b = "HelloWorld";
        System.out.println(b.length());//获取字符串的长度
        System.out.println(b.concat("!"));//在后面串成一个新的字符串，相当于“+”
        System.out.println(b.charAt(0));//得到相对于索引的字符串
        System.out.println(b.indexOf("o"));//得到字符串第一次出现方法中的字符串的位置索引，找不到就返回-1
        System.out.println(b.lastIndexOf("l"));//得到字符串最后一次出现方法中的字符串的位置索引，找不到就返回-1
        System.out.println(b.substring(2));//从方法字符串的索引位置开始截取到字符串的末尾
        System.out.println(b.substring(2 , 3));//从开始索引截取到结束索引的一段，含头不含尾
        System.out.println(b.replace("l" , "L"));//替换选择到的字符串
        String[] strArray = b.split("l");//按照什么切割得到字符数组并打印，但碰到特殊含义字符，要用到转义符"\\"去表述特殊字符
        for (int i = 0; i < strArray.length; i++) {
            System.out.print(strArray[i] + "、");
        }

        System.out.println();
        System.out.println("--------------------------");
        System.out.println("字符串转换为字符数组/字节数组：");
        String c = "abcdef";
        char[] chars = c.toCharArray();
        for (int i = 0; i < c.length() ; i++) {
            System.out.print(chars[i] + "、");
        }
        System.out.println();
        byte[] bytes = c.getBytes();
        for (int j = 0; j < c.length(); j++) {
            System.out.print(bytes[j] + "、");
        }
        System.out.println();
        System.out.println("--------------------------");
    }
}
